package com.irs.controller;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.ibatis.annotations.Param;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

@Controller
@RequestMapping("upload/")
public class UploadController {
	@RequestMapping("uploadImg")
	@ResponseBody
	public Map<String, Object> uploadImg(HttpServletRequest request,
			@Param("file") MultipartFile file) throws IOException {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
		String res = sdf.format(new Date());
		// 服务器上使用
		// String rootPath
		// =request.getServletContext().getRealPath("/uploads/");
		// 本地使用
		String rootPath = "E:\\apachetomcat\\uploads";
		// 原始名称
		String originalFilename = file.getOriginalFilename();
		// 新的文件名称
		String newFileName = res
				+ originalFilename.substring(originalFilename.lastIndexOf("."));
		// 创建年月文件夹
		Calendar date = Calendar.getInstance();
		File dateDirs = new File(date.get(Calendar.YEAR) + File.separator
				+ (date.get(Calendar.MONTH) + 1) + date.get(Calendar.DATE));
		// 新文件
		File newFile = new File(rootPath + File.separator + dateDirs
				+ File.separator + newFileName);
		// 判断目标文件所在的目录是否存在
		if (!newFile.getParentFile().exists()) {
			// 如果目标文件所在的目录不存在，则创建父目录
			newFile.getParentFile().mkdirs();
		}

		// 将内存中的数据写入磁盘
		file.transferTo(newFile);
		// 完整的url
		String fileUrl = "/uploads/" + date.get(Calendar.YEAR) + "/"
				+ (date.get(Calendar.MONTH) + 1) + date.get(Calendar.DATE)
				+ "/" + newFileName;
		Map<String, Object> map = new HashMap<String, Object>();
		Map<String, Object> map2 = new HashMap<String, Object>();
		map.put("code", 0);
		map.put("msg", "上传成功");
		map.put("data", map2);
		map2.put("src", fileUrl);
		map2.put("title", newFileName);
		/*
		 * System.out.println("=============="); System.out.println(map);
		 */

		return map;

	}

	@RequestMapping(value = "/uploadImage", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
	@ResponseBody
	public Map<String, Object> uploadFile(
			@RequestParam(value = "upfile", required = false) MultipartFile file,
			HttpServletRequest request, HttpServletResponse response) {
		Map<String, Object> map = new HashMap<String, Object>();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
		String res = sdf.format(new Date());

		String rootPath = "E:\\apachetomcat\\uploads";

		String originalFilename = file.getOriginalFilename();

		String newFileName = res
				+ originalFilename.substring(originalFilename.lastIndexOf("."));

		Calendar date = Calendar.getInstance();
		File dateDirs = new File(date.get(Calendar.YEAR) + File.separator
				+ (date.get(Calendar.MONTH) + 1) + date.get(Calendar.DATE));

		File newFile = new File(rootPath + File.separator + dateDirs
				+ File.separator + newFileName);

		if (!newFile.getParentFile().exists()) {

			newFile.getParentFile().mkdirs();
		}

		try {
			file.transferTo(newFile);
			String fileUrl = "/uploads/" + date.get(Calendar.YEAR) + "/"
					+ (date.get(Calendar.MONTH) + 1) + date.get(Calendar.DATE)
					+ "/" + newFileName;
			map.put("state", "SUCCESS");// UEDITOR的规则:不为SUCCESS则显示state的内容
			map.put("url", fileUrl); // 能访问到你现在图片的路径
			map.put("title", "");
			map.put("original", "realName");
		} catch (IllegalStateException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			map.put("state", "文件上传失败!"); // 在此处写上错误提示信息，这样当错误的时候就会显示此信息
			map.put("url", "");
			map.put("title", "");
			map.put("original", "");

		}
		return map;
	}

}
